package com.hegongda.utils;

import com.mchange.v2.c3p0.ComboPooledDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;

public class JdbcUtils {
        //创建一个C3P0的连接池对象（使用c3p0-config.xml中default-config标签中对应的参数）
        public static DataSource ds = new ComboPooledDataSource();
        private static ThreadLocal<Connection> local = new ThreadLocal<Connection>();
		private static Connection conn;
        //从池中获得一个连接
        public static Connection getConnection(){
            try {
                //#1从当前线程中， 获得已经绑定的连接
                conn = local.get();
                if(conn == null){
                    //#2 第一次获得，绑定内容 – 从连接池获得
                    conn = ds.getConnection();
                    //#3 将连接存 ThreadLocal
                    local.set(conn);
                }
                return conn; //获得连接
            } catch (Exception e) {
                //将编译时异常 转换 运行时 ， 以后开发中运行时异常使用比较多的。
                throw new RuntimeException(e);
            /*
            类与类之间 进行数据交换时，可以使用return返回值。也可以使用自定义异常返回值，调用者try{}catch(e){ e.getMessage() 获得需要的数据}
            此处可以编写自定义异常。
            */
                //throw new MyConnectionException(e);
            }
        }
        public static DataSource getDataSource(){
            return ds;
        }
		public static void close(){
		try {
			conn.close();
			local.remove();
		} catch (SQLException e) {
			
			e.printStackTrace();
		}
        }
    }
